import csv
import os
import pathlib
from peewee import *
# from peewee import PostgresqlDatabase
# from peewee import Model

NAME_DB = 'python_db'
USER_DB = 'alex'
PASS_DB = '123321'
HOST_DB = 'localhost'

# Класс подключения к БД
db = PostgresqlDatabase(database=NAME_DB, user=USER_DB,
                        password=PASS_DB, host=HOST_DB)


class Coin(Model):  # Класс таблицы с данными в БД
    num = CharField()
    tik = CharField()
    name = CharField()
    url = TextField()
    cap = CharField()
    price = CharField()
    vol = CharField()
    chg = CharField()

    class Meta:  # связь модели с БД
        database = db


def main():
    db.connect()   # связь main() с БД
    db.create_tables([Coin])   # создаём таблицу в БД

    # получаем путь к родительской директории
    path_f = os.path.dirname(pathlib.Path(__file__).parent.absolute())
    # print(os.path.join(path_f, 'lesson_04-2', 'cmc-pages.csv'))
    with open(os.path.join(path_f, 'lesson_04-2', 'cmc-pages.csv')) as file_:

        order = ['num', 'tik', 'name', 'url', 'cap', 'price', 'vol', 'chg']
        reader_f = csv.DictReader(file_, fieldnames=order)
        coins = list(reader_f)

        # способ 1 - очень затратный
        # for data in coins:
        #     coin = Coin(
        #         num=data['num'],
        #         tik=data['tik'],
        #         name=data['name'],
        #         url=data['url'],
        #         cap=data['cap'],
        #         price=data['price'],
        #         vol=data['vol'],
        #         chg=data['chg'])
        #     coin.save()

        # способ 2
        # with db.atomic():  # контекстый менеджер для БД
        #     for data in coins:
        #         # Coin.create(*args, **kwargs)
        #         Coin.create(**data)

        # способ 3
        with db.atomic():  # контекстый менеджер для БД
            for index in range(0, len(coins), 100):
                Coin.insert_many(coins[index:index+100]).execute()


if __name__ == '__main__':
    main()
